package loja.thinlet;

import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.IOException;
import java.util.ResourceBundle;

import javax.swing.JOptionPane;
import javax.swing.WindowConstants;

import dbconnection.BaseDados;

import loja.Cliente;
import loja.Encomenda;
import loja.Factura;
import loja.Fornecedor;
import loja.GestorCliente;
import loja.GestorFornecedor;
import loja.GestorProdutos;
import loja.GestorStock;
import loja.Produto;
import loja.Stock;
import thinlet.*;

public class InterfaceXML extends Thinlet {
	// gestores de negocio
	private GestorCliente gestor_cliente = null;
	private GestorFornecedor gestor_fornecedor = null;
	private GestorStock gestor_stock = null;
	private GestorProdutos gestor_produtos = null;
	// interfaces
	private WProdutoXML window_produto = null;
	private WFacturaXML window_factura = null;
	private WArmazemXML window_armazem = null;
	private WEncomendaXML window_encomenda = null;
	private WStockXML window_stock = null;
	private WClienteXML window_cliente = null;
	private WFornecedorXML window_fornecedor = null;
	private WJanelaListar window_lista = null;
	private WJanelaInformacao info = null;
	protected Moldura m_produto = null;
	protected Moldura m_factura = null;
	protected Moldura m_armazem = null;
	protected Moldura m_encomenda = null;
	protected Moldura m_stock = null;
	protected Moldura m_cliente = null;
	protected Moldura m_fornecedor = null;
	protected Moldura m_lista = null;
	protected Moldura m_informacao = null;
	protected TextArea text_area = new TextArea();;

	private boolean portugues;

	public InterfaceXML(GestorCliente gc, GestorFornecedor gf, GestorStock gs,
			GestorProdutos gp, boolean portugues) throws Exception {
		this.portugues = portugues;
		if (portugues == true) {
			setResourceBundle(ResourceBundle.getBundle("loja.thinlet.pt"));
		} else {
			setResourceBundle(ResourceBundle.getBundle("loja.thinlet.en"));
		}

		add(parse("janelainicialNova.xml"));

		this.gestor_cliente = gc;
		this.gestor_fornecedor = gf;
		this.gestor_stock = gs;
		this.gestor_produtos = gp;

		this.window_armazem=new WArmazemXML(gestor_stock, this,portugues);
		this.m_armazem = new Moldura("Armazem",this.window_armazem, 230, 180, false);

	}

	public void gerirProduto() {
		try {
			this.window_produto = new WProdutoXML(this, gestor_fornecedor,
					portugues);
		} catch (IOException e) {
			e.printStackTrace();
		}
		 this.m_produto=new Moldura("Produto", window_produto, 400, 220, true
				 );

	}

	public void listarProduto() {
		String texto = "";
		for (Produto p : gestor_fornecedor.GetProdutos())
			texto = texto + p + "\n";
		try {
			this.window_lista = new WJanelaListar(texto);
		} catch (IOException e) {
			e.printStackTrace();
		}
		this.m_lista = new Moldura("Lista Produtos", this.window_lista, 600,
				400, true);
		m_lista.setResizable(false);

	}

	public void gerirFactura() throws IOException{
		this.window_factura =new WFacturaXML(gestor_cliente,gestor_stock, portugues,this);
		this.m_factura=new Moldura("Factura", window_factura, 566, 495,true);
		m_factura.setResizable(false);

	}

	public void listarFactura() throws IOException {
		String texto = "";
		for (Factura f : gestor_cliente.getListaFacturas())
			texto = texto + f + "\n";
		this.window_lista = new WJanelaListar(texto);
		this.m_lista = new Moldura("Lista", this.window_lista, 600, 400, true);
		m_lista.setResizable(false);

	}

	public void gerirEncomenda() throws IOException {
		this.window_encomenda=new WEncomendaXML(gestor_fornecedor,gestor_produtos,gestor_stock, portugues,this);
		this.m_encomenda=new Moldura("Encomenda", this.window_encomenda, 770, 530, true);
		m_encomenda.setResizable(false);

	}

	public void listarEncomenda() throws IOException {
		String texto = "";
		for (Encomenda e : gestor_fornecedor.GetEncomendas())
			texto = texto + e + "\n";
		this.window_lista = new WJanelaListar(texto);
		this.m_lista = new Moldura("Lista", this.window_lista, 600, 400, true);
		m_lista.setResizable(false);

	}

	public void gerirCliente() throws IOException {
		this.window_cliente =new WClienteXML(gestor_cliente, portugues,this);
		this.m_cliente=new Moldura("Cliente", this.window_cliente, 490, 435, true);
		m_cliente.setResizable(false);

	}

	public void listarCliente() throws IOException {

		String texto = "";
		for (Cliente c : gestor_cliente.getListaClientes()) {
			texto = texto + c + "\n";
		}
		this.window_lista = new WJanelaListar(texto);
		this.m_lista = new Moldura("Lista", this.window_lista, 600, 400, true);
		m_lista.setResizable(false);

	}

	public void gerirFornecedor() throws IOException {
		this.window_fornecedor = new WFornecedorXML(gestor_fornecedor,gestor_produtos, portugues,this);
		this.m_fornecedor=new Moldura("Fornecedor", this.window_fornecedor, 640, 555, true);
		m_fornecedor.setResizable(false);

	}

	public void listarFornecedor() throws IOException {
		String texto = "";
		for (Fornecedor f : gestor_fornecedor.GetFornecedores())
			texto = texto + f + "\n";
		this.window_lista = new WJanelaListar(texto);
		this.m_lista = new Moldura("Lista", this.window_lista, 600, 400, true);
		m_lista.setResizable(false);

	}

	public void gerirStock() throws IOException {
		this.window_stock = new WStockXML(gestor_stock, this, portugues);
		this.m_stock=new Moldura("Stock", this.window_stock, 805, 620, true);
		m_stock.setResizable(false);

	}

	public void listarStock() throws IOException {
		String texto = "";
		for (Stock s : gestor_stock.getStocks())
			texto = texto + s + "\n";
		this.window_lista = new WJanelaListar(texto);

		this.m_lista = new Moldura("Lista", this.window_lista, 600, 400, true);
		m_lista.setResizable(false);

	}

	/**
	 * Callback handler for the 'action' method of an unnamed menuitem.
	 * 
	 * @throws IOException
	 */
	public void mostraInformacao() throws IOException {
		this.info = new WJanelaInformacao();
		this.m_informacao = new Moldura("Info", this.info, 507, 302, true);
		m_informacao.setResizable(false);
	}

	public void sair() {
		System.exit(0);
	}

	public void Mostra() {

		FrameLauncher janelaPrincipal = new FrameLauncher("Loja", this, 1027,
				632);
		janelaPrincipal.setResizable(false);
	}

	public void gerirArmazem(boolean b) {
		m_armazem.setVisible(b);

	}

}
